package edu.client;

import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.logical.shared.SelectionEvent;
import com.google.gwt.event.logical.shared.SelectionHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.DockPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.LayoutPanel;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.TabPanel;
import com.google.gwt.user.client.ui.Tree;
import com.google.gwt.user.client.ui.TreeItem;

public class P_PantallaJefeMecanicaElectricaProcesos extends Composite {

	private Constantes constante = GWT.create(Constantes.class);
	
	private int ancho;
	private int alto;
	private int anchoLateral;
	private DockPanel contenedor;
	private LayoutPanel superior;
	private Label logoEmpresa;
	private Label lblUsuario;
	private Label logotipo;
	private Button btnCerrarSesin;
	private LayoutPanel menu;
	private Label menuLabel;
	private ScrollPanel formulario;
	
	private Tree menuLateral;
	
	private TreeItem definirListaMateriales;
	private TreeItem buscarListaMateriales;
	
	private TreeItem crearEquipoPatron;
	private TreeItem editarEquipoPatron;
	private TreeItem buscarEquipoPatron;
	private TreeItem nuevoPlanoEquipoPatron;
	private TreeItem nuevaVersionEquipoPatron;
	
	private TreeItem crearComponentePatron;
	private TreeItem editarComponentePatron;
	private TreeItem buscarComponentePatron;
	private TreeItem nuevoPlanoComponentePatron;
	private TreeItem nuevaVersionComponentePatron;
	
	private TabPanel panelTrabajo;
	private String usuario;

	public P_PantallaJefeMecanicaElectricaProcesos(String usuarioLogueado) {
		
		this.usuario = usuarioLogueado;
		
		Window.setTitle("INTESA - INGENIERÍA");

		ancho = Window.getClientWidth() - 15;
		alto = Window.getClientHeight() - 13;
		anchoLateral = 180;
		contenedor = new DockPanel(); 
		contenedor.setStyleName("panelFondo");
		contenedor.setSize(ancho + "px", alto + "px");
		initWidget(contenedor);

		superior = new LayoutPanel();
		superior.setStyleName("superior");
		superior.setSize(ancho + "px", "75px");
		contenedor.add(superior, DockPanel.NORTH);

		logoEmpresa = new Label("");

		logoEmpresa.setStyleName("imagenLogo");
		superior.add(logoEmpresa);
		superior.setWidgetLeftWidth(logoEmpresa, 0.0, Unit.PX, 556.0, Unit.PX);
		superior.setWidgetTopHeight(logoEmpresa, 0.0, Unit.PX, 75.0, Unit.PX);

		lblUsuario = new Label(constante.usuario() + ": " + usuarioLogueado.toUpperCase());
		lblUsuario.setStyleName("labelSuperior");
		lblUsuario.setDirectionEstimator(true);
		lblUsuario.setWidth("500px");
		superior.add(lblUsuario);
		
		superior.setWidgetLeftWidth(lblUsuario, (ancho-(ancho/2)),Unit.PX,500.0, Unit.PX);
		superior.setWidgetTopHeight(lblUsuario, 16.0, Unit.PX, 29.0, Unit.PX);
		btnCerrarSesin = new Button(constante.cerrarSesion());
		btnCerrarSesin.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent event) {
				cerrar();
			}
		});
		btnCerrarSesin.setStyleName("botonSuperior");
		superior.add(btnCerrarSesin);
		superior.setWidgetLeftWidth(btnCerrarSesin, ancho - 150, Unit.PX, 130, Unit.PX);
		superior.setWidgetTopHeight(btnCerrarSesin, 51.0, Unit.PX, 24.0, Unit.PX);

		menu = new LayoutPanel();
		menu.setStyleName("menuLateral");
		menu.setSize(anchoLateral + "px", (alto - 90) + "px");
		contenedor.add(menu, DockPanel.WEST);

		
		
		
		/**
		 * Arma el menú del panel lateral
		 * 
		 */
		logotipo = new Label("");
		logotipo.setStyleName("imagenIntesa");
		menu.add(logotipo);
		menu.setWidgetLeftWidth(logotipo, 5.0, Unit.PX, 150.0, Unit.PX);
		menu.setWidgetTopHeight(logotipo, alto-250, Unit.PX, 150.0, Unit.PX);

		menuLateral = new Tree();
		menu.add(menuLateral);
		menuLateral.setSize("100%", "100%");
			
		TreeItem equipoPatron = menuLateral.addItem("EQUIPO PATRÓN");
		equipoPatron.setStyleName("elementoMenu");
		
		crearEquipoPatron = new TreeItem("CREAR");
		crearEquipoPatron.setStyleName("suElementoMenu");
		equipoPatron.addItem(crearEquipoPatron);
		
		editarEquipoPatron = new TreeItem("EDITAR");
		editarEquipoPatron.setStyleName("suElementoMenu");
		equipoPatron.addItem(editarEquipoPatron);
		
		buscarEquipoPatron = new TreeItem("BUSCAR");
		buscarEquipoPatron.setStyleName("suElementoMenu");
		equipoPatron.addItem(buscarEquipoPatron);
		
		nuevoPlanoEquipoPatron = new TreeItem("NUEVO PLANO");
		nuevoPlanoEquipoPatron.setStyleName("suElementoMenu");
		equipoPatron.addItem(nuevoPlanoEquipoPatron);
		
		nuevaVersionEquipoPatron = new TreeItem("NUEVA VERSIÓN");
		nuevaVersionEquipoPatron.setStyleName("suElementoMenu");
		equipoPatron.addItem(nuevaVersionEquipoPatron);
		
		TreeItem componentePatron = menuLateral.addItem("COMPONENTE PATRÓN");
		componentePatron.setStyleName("elementoMenu");
		
		crearComponentePatron = new TreeItem("CREAR");
		crearComponentePatron.setStyleName("suElementoMenu");
		componentePatron.addItem(crearComponentePatron);
		
		editarComponentePatron = new TreeItem("EDITAR");
		editarComponentePatron.setStyleName("suElementoMenu");
		componentePatron.addItem(editarComponentePatron);
		
		buscarComponentePatron = new TreeItem("BUSCAR");
		buscarComponentePatron.setStyleName("suElementoMenu");
		componentePatron.addItem(buscarComponentePatron);
		
		nuevoPlanoComponentePatron = new TreeItem("NUEVO PLANO");
		nuevoPlanoComponentePatron.setStyleName("suElementoMenu");
		componentePatron.addItem(nuevoPlanoComponentePatron);
		
		nuevaVersionComponentePatron = new TreeItem("NUEVA VERSIÓN");
		nuevaVersionComponentePatron.setStyleName("suElementoMenu");
		componentePatron.addItem(nuevaVersionComponentePatron);
				
		TreeItem listaDeMateriales = menuLateral.addItem(constante.listaDeMateriales());
		listaDeMateriales.setStyleName("elementoMenu");
			
		definirListaMateriales = new TreeItem("DEFINIR");
		definirListaMateriales.setStyleName("suElementoMenu");
		listaDeMateriales.addItem(definirListaMateriales);
		
		buscarListaMateriales = new TreeItem("BUSCAR");
		buscarListaMateriales.setStyleName("suElementoMenu");
		listaDeMateriales.addItem(buscarListaMateriales);
		
		/**
		 * Panel central, contiene las distintos formularios que se van agregando
		 * en pestañas cada vez que se elige un formulario del panel lateral
		 */
		panelTrabajo = new TabPanel();
		panelTrabajo.setAnimationEnabled(true);
		panelTrabajo.setStyleName("panelTrabajo");

		contenedor.add(panelTrabajo, DockPanel.CENTER);
		panelTrabajo.setSize((ancho - anchoLateral - 10) + "px", (alto - 90) + "px");
		
		menuLabel = new Label("");
		menuLabel.setStyleName("imagenMenu");
		menu.add(menuLabel);
		menu.setWidgetRightWidth(menuLabel, -17.0, Unit.PX, 15.0, Unit.PX);
		menu.setWidgetTopHeight(menuLabel, 40.0, Unit.PCT, 65.0, Unit.PX);
		
		menuLabel.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent event) {
				if (menuLateral.isVisible())
					ocultarMenu();
				else
					mostrarMenu();
			}
		});
		
		menuLateral.addSelectionHandler(new SelectionHandler<TreeItem>() {
			public void onSelection(SelectionEvent<TreeItem> event) {
				procesa(event);
			}
		});
		
		panelTrabajo.addSelectionHandler(new SelectionHandler<Integer> (){
			public void onSelection(SelectionEvent<Integer> event) {
				if (menuLateral.isVisible())
					ocultarMenu();
			}
		});

		Window.addWindowClosingHandler(new Window.ClosingHandler() {
			public void onWindowClosing(Window.ClosingEvent closingEvent) {
				closingEvent.setMessage("");
			}
		});

	}

	protected void cerrar() {
		

		int cantidad = RootPanel.get().getWidgetIndex(this);
		RootPanel.get().remove(cantidad);
		P_Login log = new P_Login();
		RootPanel.get().add(log);
		try {
			this.finalize();
		} catch (Throwable e) {
			e.printStackTrace();
		}
	}

	protected void procesa(SelectionEvent<TreeItem> event) {
		String titulo;
		int tab;
		
		if (event.getSelectedItem() == crearEquipoPatron) {
			
			titulo = "CREAR EQUIPO PATRÓN";
			tab = Validaciones.numeroElemento(panelTrabajo, titulo);
			
			//si no hay una pesataña con la funcionalidad seleccionada
			if (tab == -1) {
				
				P_CrearEquipoPatron pCrearEquipoPatron = new P_CrearEquipoPatron(panelTrabajo, titulo);
				cargarPantalla(pCrearEquipoPatron, titulo);
			}
			
			//si ya estaba la pestaña abierta, la seleccionamos
			else {
				panelTrabajo.selectTab(tab);
			}
		}
		
		else if (event.getSelectedItem() == editarEquipoPatron) {
			
			titulo = "EDITAR EQUIPO PATRÓN";
			tab = Validaciones.numeroElemento(panelTrabajo, titulo);
			
			if (tab == -1) {
				P_EditarEquipoPatronSeleccion pEditarEquipoPatronSeleccion = new P_EditarEquipoPatronSeleccion(panelTrabajo, titulo);
				cargarPantalla(pEditarEquipoPatronSeleccion, titulo);
			}
			
			else {
				panelTrabajo.selectTab(tab);
			}
		}
		
		else if (event.getSelectedItem() == buscarEquipoPatron) {
			
			titulo = "BUSCAR EQUIPO PATRÓN";
			tab = Validaciones.numeroElemento(panelTrabajo, titulo);
			
			//si no hay una pesataña con la funcionalidad seleccionada
			if (tab == -1) {
				
				P_BuscarEquipoPatron pBuscarEquipoPatron = new P_BuscarEquipoPatron(panelTrabajo, titulo);
				cargarPantalla(pBuscarEquipoPatron, titulo);
			}
			
			//si ya estaba la pestaña abierta, la seleccionamos
			else {
				panelTrabajo.selectTab(tab);
			}
		}
		
		else if (event.getSelectedItem() == nuevoPlanoEquipoPatron) {
			
			titulo = "NUEVO PLANO DE EQUIPO PATRÓN";
			tab = Validaciones.numeroElemento(panelTrabajo, titulo);
			
			if (tab == -1) {
				P_NuevoPlanoEquipoPatronSeleccion pNuevoPlanoEquipoPatronSeleccion = new P_NuevoPlanoEquipoPatronSeleccion(panelTrabajo, titulo);
				cargarPantalla(pNuevoPlanoEquipoPatronSeleccion, titulo);
			}
			
			else {
				panelTrabajo.selectTab(tab);
			}
		}
		
		else if (event.getSelectedItem() == nuevaVersionEquipoPatron) {
			
			titulo = "NUEVA VERSIÓN EQUIPO PATRÓN";
			tab = Validaciones.numeroElemento(panelTrabajo, titulo);
			
			if (tab == -1) {
				P_NuevaVersionEquipoPatronSeleccion pNuevaVersionEquipoPatronSeleccion = new P_NuevaVersionEquipoPatronSeleccion(panelTrabajo, titulo);
				cargarPantalla(pNuevaVersionEquipoPatronSeleccion, titulo);
			}
			
			else {
				panelTrabajo.selectTab(tab);
			}
		}
				
		else if (event.getSelectedItem() == crearComponentePatron) {
			
			titulo = "CREAR COMPONENTE PATRÓN";
			tab = Validaciones.numeroElemento(panelTrabajo, titulo);
			
			if (tab == -1) {
				P_CrearComponentePatron pCrearComponentePatron = new P_CrearComponentePatron(panelTrabajo, titulo);
				cargarPantalla(pCrearComponentePatron, titulo);
			}
			
			else {
				panelTrabajo.selectTab(tab);
			}
		}
		
		else if (event.getSelectedItem() == editarComponentePatron) {
			
			titulo = "EDITAR COMPONENTE PATRÓN";
			tab = Validaciones.numeroElemento(panelTrabajo, titulo);
			
			if (tab == -1) {
				P_EditarComponentePatronSeleccion pEditarComponentePatron = new P_EditarComponentePatronSeleccion(panelTrabajo, titulo);
				cargarPantalla(pEditarComponentePatron, titulo);
			}
			
			else {
				panelTrabajo.selectTab(tab);
			}
		}
		
		else if (event.getSelectedItem() == buscarComponentePatron) {
			
			titulo = "BUSCAR COMPONENTE PATRÓN";
			tab = Validaciones.numeroElemento(panelTrabajo, titulo);
			
			if (tab == -1) {
				P_BuscarComponentePatron pBuscarComponentePatron= new P_BuscarComponentePatron(panelTrabajo, titulo);
				cargarPantalla(pBuscarComponentePatron, titulo);
			}
			
			else {
				panelTrabajo.selectTab(tab);
			}
		}
		
		else if (event.getSelectedItem() == nuevoPlanoComponentePatron) {
			
			titulo = "NUEVO PLANO COMPONENTE PATRÓN";
			tab = Validaciones.numeroElemento(panelTrabajo, titulo);
			
			if (tab == -1) {
				P_NuevoPlanoComponentePatronSeleccion pNuevoPlanoComponentePatronSeleccion = new P_NuevoPlanoComponentePatronSeleccion(panelTrabajo, titulo);
				cargarPantalla(pNuevoPlanoComponentePatronSeleccion, titulo);
			}
			
			else {
				panelTrabajo.selectTab(tab);
			}
		}
		
		else if (event.getSelectedItem() == nuevaVersionComponentePatron) {
			
			titulo = "NUEVA VERSIÓN COMPONENTE PATRÓN";
			tab = Validaciones.numeroElemento(panelTrabajo, titulo);
			
			if (tab == -1) {
				P_NuevaVersionComponentePatronSeleccion pNuevaVersionComponentePatronSeleccion = new P_NuevaVersionComponentePatronSeleccion(panelTrabajo, titulo);
				cargarPantalla(pNuevaVersionComponentePatronSeleccion, titulo);
			}
			
			else {
				panelTrabajo.selectTab(tab);
			}
		}
		
		else if (event.getSelectedItem() == definirListaMateriales) {

			titulo = "DEFINIR LISTA DE MATERIALES";
			tab = Validaciones.numeroElemento(panelTrabajo, titulo);
			
			if (tab == -1) {
				P_DefinirListaMaterialesSeleccion p_DefinirListaMateriales = new P_DefinirListaMaterialesSeleccion(panelTrabajo, titulo);
				cargarPantalla(p_DefinirListaMateriales, titulo);
			}
			
			else {
				panelTrabajo.selectTab(tab);
			}
		}
		
		else if (event.getSelectedItem() == buscarListaMateriales) {

			titulo = "BUSCAR LISTA DE MATERIALES";
			tab = Validaciones.numeroElemento(panelTrabajo, titulo);
			
			if (tab == -1) {
				P_BuscarListaMateriales p_BuscarListaMateriales = new P_BuscarListaMateriales(panelTrabajo, titulo);
				cargarPantalla(p_BuscarListaMateriales, titulo);
			}
			
			else {
				panelTrabajo.selectTab(tab);
			}
		}
	}
	
	//CÓDIGO IMPLEMENTADO EN SEGUNDA ETAPA
	
	private void cargarPantalla(Composite pantalla, String titulo)
	{
		formulario = new ScrollPanel();
		formulario.setTitle(titulo);
		formulario.setStyleName("panelFormulario");
		//formulario.setSize("100%", (alto - 145) + "px");
		formulario.setSize((ancho - 25) + "px", (alto - 145) + "px");
		formulario.add(pantalla);
		panelTrabajo.add(formulario, titulo, false);
		panelTrabajo.selectTab(Validaciones.numeroElemento(panelTrabajo, titulo));		
	}
	
	private void ocultarMenu() {
		menuLateral.setFocus(false);
		menuLateral.setVisible(false);
		menu.setWidth("0px");
		menu.setWidgetLeftWidth(menuLabel, -5.0, Unit.PX, 15.0, Unit.PX);
		menu.setStyleName("menuLateralOculto");
		panelTrabajo.setSize((ancho - 5) + "px", (alto - 90) + "px");

		for(int i = 0; i < panelTrabajo.getWidgetCount(); i++)
			panelTrabajo.getWidget(i).setSize((ancho - 20) + "px", (alto - 145) + "px");

		logotipo.setVisible(false);
	}
	
	private void mostrarMenu() {
		menuLateral.setFocus(true);
		menuLateral.setVisible(true);
		menu.setWidth("180px");
		menu.setWidgetRightWidth(menuLabel, -17.0, Unit.PX, 15.0, Unit.PX);
		menu.setStyleName("menuLateral");
		panelTrabajo.setSize((ancho - anchoLateral - 10) + "px", (alto - 90) + "px");
		
		for(int i = 0; i < panelTrabajo.getWidgetCount(); i++)
			panelTrabajo.getWidget(i).setSize((ancho - anchoLateral - 25) + "px",(alto - 145) + "px");

		logotipo.setVisible(true);
	}
	
}
